/*
 * Created by XiaoDongLei
 * Copyright (c) 2017-2017
 * Apache License
 * Version 2.0, January 2004
 * http://www.apache.org/licenses/
 *
 *
 */
package com.vonzhou.springinaction.springidol;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

/**
 * @author XiaoDongLei
 * @Package com.vonzhou.springinaction.springidol.config
 * @date 2018/3/27
 * @Description:
 */
@Configuration
@EnableAspectJAutoProxy
//@ComponentScan
public class ConcertConfig {

	@Bean
	public Audience audience() {
		return new Audience();
	}

	@Bean
	public Instrument guitar() {
		return new Guitar();
	}

	@Bean
	public Performer eddie(Instrument instrument) {
		/**
		 * 因为instrument()方法上添加了@Bean注解，Spring将会拦截所有对它的调用，并确保直接返回该方法所创建的bean，而不是每次都对其进行实际的调用。
		 *
		 * 看起来，Instrument是通过调用Guitar()得到的，但情况并非完全如此。因为Guitar()方法上添加了@Bean注解，Spring将会拦截所有对它的调用，并确保直接返回该方法所创建的bean，而不是每次都对其进行实际的调用。
		 * 默认情况下，Spring中的bean都是单例的，我们并没有必要为第二个Instrument bean创建完全相同的SgtPeppers实例
		 */
		return new InstrumentaList(instrument);
	}
}
